////////////////////////////////////////////////////////////////////////////////
// Filename: window.hpp
////////////////////////////////////////////////////////////////////////////////
#ifndef WINDOW_HPP_
#define WINDOW_HPP_

///////////////////////////////
// PRE-PROCESSING DIRECTIVES //
///////////////////////////////
#define WIN32_LEAN_AND_MEAN

//////////////
// INCLUDES //
//////////////
#include <windows.h>
#include "input.hpp"

////////////////////////////////////////////////////////////////////////////////
// Class name: Window
////////////////////////////////////////////////////////////////////////////////
class Window {
public:
	Window(LPCSTR);
	~Window();

	bool Initialize();
	void Shutdown();
	int GetWidth();
	int GetHeight();
	LPCSTR GetName();
	HWND GetHandle();
	MarkIV::System::Input* GetInput();
	void SetWidth(int);
	void SetHeight(int);
	void SetResolution(int, int);

	LRESULT CALLBACK MessageHandler(HWND, UINT, WPARAM, LPARAM);

private:
	int m_width;
	int m_height;
	int m_posX;
	int m_posY;
	LPCSTR m_applicationName;
	HINSTANCE m_hInstance;
	HWND m_hWnd;
	MarkIV::System::Input* m_input;
};

/////////////////////////
// FUNCTION PROTOTYPES //
/////////////////////////
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

/////////////
// GLOBALS //
/////////////
static Window* s_applicationHandle = NULL;

#endif
